#include "archivoDocumentos.h"

fstream* RegRutaDocumento::rutaDocs = NULL; 

archivoDocumentos::archivoDocumentos(string ruta, string rutasec) : indice(ruta), indiceSec(rutasec)
{
	this->rutaDocumentos.open(ruta.c_str(), fstream::in|fstream::out|fstream::binary);
	if(!this->rutaDocumentos.is_open())
	{
		this->rutaDocumentos.clear();
		this->rutaDocumentos.open(ruta.c_str(), fstream::out|fstream::binary);
		this->rutaDocumentos.seekp(0,fstream::beg);
		this->cantDocumentos = 0;
		this->rutaDocumentos.write((char*) &(this->cantDocumentos), sizeof(this->cantDocumentos));
		this->rutaDocumentos.close();
		this->rutaDocumentos.clear();
		this->rutaDocumentos.open(ruta.c_str(), fstream::in|fstream::out|fstream::binary);
	}
	this->rutaDocumentos.seekg(0,fstream::beg);
	this->rutaDocumentos.read((char*) &(this->cantDocumentos), sizeof(this->cantDocumentos));
	RegRutaDocumento::rutaDocs = &(this->rutaDocumentos);
}

archivoDocumentos::~archivoDocumentos()
{
	this->rutaDocumentos.seekp(0,fstream::beg);
	this->rutaDocumentos.write((char*) &(this->cantDocumentos), sizeof(this->cantDocumentos));
	indice.cerrar();
}

long archivoDocumentos::agregarDocumento(string& rutaDoc) 
{
	RegRutaDocumento clave;
	RegIdDocumento dato;
	
	clave.setRuta(rutaDoc);
	this->indice.readIgual(dato,clave);
	if(this->indice.eof()) {
		 //la ruta no existe, escribimos el string en el archivo 
		 // y agregamos el idDoc como dato al indice  
		this->cantDocumentos++;
		dato = this->cantDocumentos;
		clave.writeRuta(rutaDoc);
		this->indice.insert(clave, dato);
		this->indiceSec.insert(dato, clave);
	}
	else
		dato = indice.getDato();
	
	return dato.getIdDocumento();
}

long archivoDocumentos::obtenerIdDocumento(string& rutaDoc)
{
	RegRutaDocumento clave;
	RegIdDocumento dato;
	
	clave.setRuta(rutaDoc);
	this->indice.readIgual(dato,clave);
	if(this->indice.eof())
		return 0;
	else {
		dato=indice.getDato();
		return dato.getIdDocumento();
	}  
}


string archivoDocumentos::obtenerRutaDocumento(long idDoc)
{
	RegIdDocumento clave;
	RegRutaDocumento dato;
	
	clave.setIdDocumento(idDoc);
	this->indiceSec.readIgual(dato,clave);
	if(this->indiceSec.eof())
		return "";
	else {
		dato=indiceSec.getDato();
		return dato.readRuta();
	}
}

long archivoDocumentos::getCantDocumentos()
{
	return this->cantDocumentos;
}